#!/bin/bash

# Precondiciones:
# 1. el código fuente pasado por parámetro debe existir y tener formato válido para el parseo.

# Compila adecuadamente el código dado como argumento.
gcc -o prueba -g3 -std=c99 -O0 $1

# Ejecuta la corrida de valgrind sobre.
if [ $# -gt 4 ]
then
	valgrind -q --tool=cachegrind --cachegrind-out-file=salida --D1=$3,$4,$5 ./prueba
else
	valgrind -q --tool=cachegrind --cachegrind-out-file=salida ./prueba
fi


# Corre cg_annotate sobre el archivo de salida.
cg_annotate --auto=yes --show=Dw,D1mw salida $1 > aparsear.txt
if [ $2 = "VIAS" ]
then
	
	# Parsea el resultado.
	variable=`grep -F "a[i][0]='k'" aparsear.txt | sed 's/ *\([^ ]*\) *\([^ ]*\)/\1 \2 /g'`
  writes=`echo $variable | cut -f1 -d' ' | sed 's/,//g'`
  misses=`echo $variable | cut -f2 -d' ' | sed 's/,//g'`

	if [ $writes = '.' ]
	then
		writes=1
	fi
	if [ $misses = '.' ]
	then
		misses=0
	fi
	resultado=`echo "scale=4;$misses/$writes" | bc`
	echo $resultado
else
	# Parsea el resultado.
	variable=`grep -F "a[i]='k'" aparsear.txt | sed 's/ *\([^ ]*\) *\([^ ]*\)/\1 \2 /g'`
	writes=`echo $variable | cut -f1 -d' ' | sed 's/,//g'`
	misses=`echo $variable | cut -f2 -d' ' | sed 's/,//g'`
	
	# Imprime el resultado
	if [ $2 = "CANT" ]
	then
		echo "$misses"
	else
		resultado=`echo "scale=4;$misses/$writes" | bc`
		echo "$resultado"
	fi
fi

# Elimina archivos temporales.
rm aparsear.txt
rm salida
rm prueba

exit 0
